焊接新需求接口说明

修订日期 修订版本 修订内容 修订人
2025.05.08 v0.1 初始化文档 李东阳
2025.07.16 v0.2 更新接口开发说明 李东阳

新增需求: ① 方位角设置;② 中心上升设置;③ 动态调整频率和幅值

方位角

SuperimposedParameters结构体新增属性:

double        azimuth;        // 摆焊波形方位角,单位rad

定义: 在摆焊平面,增加方位角theta,以图像的第一个周期为例,定义方位角向量,起点是T/4周期处x轴上的点,终点是波峰顶点,方位角是Y轴和方位角向量之间的夹角:

angle

理论取值范围(-π/2,π/2)

中心上升

SuperimposedParameters结构体新增属性:

double        ridge_height;        // 中心上升高度

定义: 将摆焊波形投影到摆焊坐标系的xy平面,波形和主路径的交点,给交点设置的高度值。在轨迹开头和轨迹结尾不进行中心上升

中心隆起

动态调整频率和幅值

SuperimposedParameters结构体新增属性:

int         adjust_cycle_num{0};    // 动态调节频率和幅值时, 指定的过渡段数量

在摆焊过程中实现频率和幅值的实时调整,用户可以设置过渡段的数量。

变频

新增接口

    /**
     * @brief 设置摆动参数,位置摆主要用于焊接,姿态摆主要用于力控寻孔
     * @param sp: 摆动参数,具体参考SuperimposedParameters结构体
     * @return: 返回值 < 0, 表示设置失败
     */
    ARAL_API_COMMON(1.0) int tpSetWeaveParameters(const SuperimposedParameters& sp) = 0;

    /**
     * @brief 支持在摆动过程中调整频率和振幅,暂只支持正弦摆
     * @param frequency: 摆动参数频率, 范围[0.1, 5], 单位: Hz
     * @param amplitude: 两侧摆动幅值, 单位: m
     * @return: 返回值 < 0, 表示调整失败
     */
    ARAL_API_COMMON(1.0) int tpUpdateWeaveParameters(const double& frequency, const Array2d& amplitude) = 0;

算法版本0.40.28+0e304ee以前的版本, 开发实例

std::vector<std::vector<interface::PathPoint>> pathpoints;
std::vector<interface::RLPose> poses;
std::vector<interface::PathProperty> path_propertys;
std::vector<interface::MoveProperty> move_propertys;

interface::MoveProperty mAttr_L;
std::vector<double> maxV,maxA,maxJ;
maxV = {0.01, 2.0};
maxA = {4.0, 16.0};
maxJ = {32.0, 128.0};
mAttr_L = generateMoveProperty(interface::MoveMode::POSITION, 0, maxV, maxA, maxJ);

// step01 设置焊接参数
interface::SuperimposedParameters sp; // 焊接参数
sp.vel = maxV[0]; // 焊接参数vel和焊接轨迹的位置速度一致
sp.frequency = 1;
sp.amplitude = {0.0025, 0.0025};
sp.angle = M_PI / 4;
sp.type = interface::WeaveType::SINE;
sp.azimuth = M_PI / 3;
sp.ridge_height = 0.0005;
sp.hold_distance = {0.005, 0.01};
sp.adjust_cycle_num = 1;
sp.enable = true;

// step02 生成路点
poses = { {0.413127, 0.152011, 0.44038, -3.13922, -0.00236571, 1.57078} };
int N = poses.size();
path_propertys.resize(N);
move_propertys.resize(N);
pathpoint.resize(N);
interface::ToolWorkpiece tw;
for(int i = 0; i < N; i++)
{
    path_propertys[i].describe_space = interface::DescribeSpace::CARTESIAN;
    path_propertys[i].blend_radius = {0.1, 0.1};
    move_propertys[i] = mAttr_L;
    pathpoint[i] = generatePathPoint(interface::DescribeSpace::CARTESIAN, i+1, {}, poses[i], tw);
}

// step03 添加摆焊轨迹
ret = robot->tpSetWeaveParameters(sp); // 第一次调用,摆焊开始
int N = pathpoint.size();
for(int i = 0; i < N; i++)
{
    ret = robot->tpAddPositionLine(pathpoint[i], path_propertys[i], move_propertys[i]);
    CHECK(ret >= 0);
}
sp.enable = false;
ret = robot->tpSetWeaveParameters(sp); // 第二次调用,摆焊结束

//===============================动态调整焊接参数============================================
// 在当前摆焊执行过程中,任意时刻调用tpUpdateWeaveParameters,即可实现频率和幅值的实时调整
robot->tpUpdateWeaveParameters(1, {0.001, 0.001});

算法0.40.28+0e304ee以后的版本

新增添加摆焊路径接口: tpAddWeavePath, 从此版本后, 焊接路径的添加, 一律采用该接口

   /**
     * @brief 添加摆焊路径
     * @param path_info: 摆焊路径, 描述多条路径的几何信息,路径属性,运动属性以及工具和工件信息,其每个元素 MotionProperty 用于创建一条基本路径   (直线、圆弧),
     *                   通过在PathProperty(偏移路径只能是笛卡尔运动, describe_space = interface::DescribeSpace::CARTESIAN)设置交融半径大小,路径之间可进行交融形成组合路径(支持直线、圆弧)
     * @return 返回值 < 0, 表示添加失败
     */
    ARAL_API_COMMON(1.0) int tpAddWeavePath(const std::vector<MotionProperty>& path_info) = 0;

使用示例:

  <!-- 不解析相关语法标签 -->

interface::RLJntArray q0;       // 初始关节角
interface::SuperimposedParameters sp; // 焊接参数

// 路径属性
interface::PathProperty property_L; // 直线路径
property_L.describe_space = interface::DescribeSpace::CARTESIAN;
property_L.blend_radius = {0.01, 0.01};
property_L.cur_prop.type= interface::CurveType::LINE;

interface::PathProperty property_C; // 圆弧路径
property_C.describe_space = interface::DescribeSpace::CARTESIAN;
property_C.blend_radius = {0.01, 0.01};
property_C.cur_prop.type= interface::CurveType::ARC;

// 运动属性
interface::MoveProperty mAttr_L;
maxV = {0.01, 2.0};
maxA = {4.0, 16.0};
maxJ = {32.0, 128.0};
mAttr_L = generateMoveProperty(interface::MoveMode::POSITION, 0, maxV, maxA, maxJ);

std::vector<interface::RLPose> poses;
std::vector<interface::MotionProperty> path_info;
interface::MotionProperty pair;

// step01 设置焊接参数
interface::SuperimposedParameters sp; // 焊接参数
sp.vel = maxV[0]; // 焊接参数vel和焊接轨迹的位置速度一致
sp.frequency = 1;
sp.amplitude = {0.0025, 0.0025};
sp.angle = M_PI / 4;
sp.type = interface::WeaveType::SINE; // 目前波形仅有正弦波
sp.azimuth = M_PI / 3;
sp.ridge_height = 0.0005;
sp.hold_distance = {0.005, 0.01}; // 停留距离和停留时间只能设置其中一种
sp.adjust_cycle_num = 1; 

// step02 生成路径段集合path_info
type.second = aubo_i10;
q0 = {0.4302601943336776,-0.2451118594186679,1.766761099778305,0.4399033081946187,1.573937800524044,0.4302739018325941};
poses = { {0.813127101, 0.152011269523124, 0.4403801151918321, -3.139215899747858, -0.002365712169961738, 1.570777964950287}, // 和q0对应的位姿(起点位姿)
         {0.4131283855133971,0.1520110248688192,0.440379999293883,-3.139220114732462,-0.002364853252729899,1.570779942769754},
         {0.1493783563267952,0.231189838194646,0.4403800073239479,-3.139220542691547,-0.002364934837960015,1.570780116886467},
         {0.4272623532102556,0.3587243122329543,0.4396531535686758,-3.137317545087084,0.0005621364367052419,1.570010641506535} };
int N = poses.size();
std::vector<interface::PathPoint> path0, path1;
for(int i = 0; i < N; i++) // 这里生成路径段,其中{poses[0], poses[1]}组成直线路径, {poses[1], poses[2], poses[3]}组成圆弧路径
{
    if(i < 2)
        path0.push_back(generatePathPoint(interface::DescribeSpace::CARTESIAN, i+1, {}, poses[i], t_w));
    if(i > 0)
        path1.push_back(generatePathPoint(interface::DescribeSpace::CARTESIAN, i+1, {}, poses[i], t_w));
}
pair = {path0, property_L, mAttr_L};
path_info.push_back(pair);
pair = {path1, property_C, mAttr_L};
path_info.push_back(pair);

// step03 添加摆焊轨迹
sp.enable = true;
ret = robot->tpSetWeaveParameters(sp);
ret = robot->tpAddWeavePath(path_info);
CHECK(ret >= 0);
robot->tpSetEndPath();
sp.enable = false;
ret = robot->tpSetWeaveParameters(sp);

//===============================动态调整焊接参数============================================
// 在当前摆焊执行过程中,任意时刻调用tpUpdateWeaveParameters,即可实现频率和幅值的实时调整(停留时间属性不支持动态调整)
robot->tpUpdateWeaveParameters(1, {0.001, 0.001});

  <!-- 结束 -->

results matching ""

    No results matching ""